#Boa:Dialog:Dialog1

import wx
import consultasBD
import utiles
from decimal import Decimal

ROJO = (255, 145, 145, 255)
VERDE = (145, 255, 145, 255)
AZUL = (145, 145, 255, 255)
BLANCO = (255, 255, 255, 255)
AMARILLO = (254, 248, 191, 255)

def create(parent):
    return Dialog1(parent)

[wxID_DIALOG1, wxID_DIALOG1BUTTON1, wxID_DIALOG1BUTTON2, wxID_DIALOG1BUTTON3, 
 wxID_DIALOG1COMBOBOX1, wxID_DIALOG1COMBOBOX2, wxID_DIALOG1COMBOBOX3, 
 wxID_DIALOG1COMBOBOX4, wxID_DIALOG1PANEL1, wxID_DIALOG1STATICTEXT1, 
 wxID_DIALOG1STATICTEXT10, wxID_DIALOG1STATICTEXT2, wxID_DIALOG1STATICTEXT3, 
 wxID_DIALOG1STATICTEXT4, wxID_DIALOG1STATICTEXT5, wxID_DIALOG1STATICTEXT6, 
 wxID_DIALOG1STATICTEXT7, wxID_DIALOG1STATICTEXT8, wxID_DIALOG1STATICTEXT9, 
 wxID_DIALOG1TEXTCTRL1, wxID_DIALOG1TEXTCTRL2, wxID_DIALOG1TEXTCTRL3, 
 wxID_DIALOG1TEXTCTRL4, wxID_DIALOG1TEXTCTRL5, wxID_DIALOG1TEXTCTRL6, 
 wxID_DIALOG1TEXTCTRL7, 
] = [wx.NewId() for _init_ctrls in range(26)]

class Dialog1(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_DIALOG1, name='', parent=prnt,
              pos=wx.Point(470, 164), size=wx.Size(344, 332),
              style=wx.DEFAULT_DIALOG_STYLE, title='Ingreso / Egreso')
        self.SetClientSize(wx.Size(336, 305))

        self.panel1 = wx.Panel(id=wxID_DIALOG1PANEL1, name='panel1',
              parent=self, pos=wx.Point(0, 0), size=wx.Size(384, 376),
              style=wx.TAB_TRAVERSAL)

        self.staticText1 = wx.StaticText(id=wxID_DIALOG1STATICTEXT1,
              label='Fecha', name='staticText1', parent=self.panel1,
              pos=wx.Point(16, 8), size=wx.Size(29, 13), style=0)

        self.textCtrl1 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL1, name='textCtrl1',
              parent=self.panel1, pos=wx.Point(16, 24), size=wx.Size(72, 21),
              style=0, value='')
        self.textCtrl1.SetEditable(False)

        self.staticText2 = wx.StaticText(id=wxID_DIALOG1STATICTEXT2,
              label='Tipo de Operacion', name='staticText2', parent=self.panel1,
              pos=wx.Point(96, 8), size=wx.Size(87, 13), style=0)

        self.textCtrl2 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL2, name='textCtrl2',
              parent=self.panel1, pos=wx.Point(96, 24), size=wx.Size(100, 21),
              style=0, value='')
        self.textCtrl2.SetEditable(False)

        self.comboBox1 = wx.ComboBox(choices=[], id=wxID_DIALOG1COMBOBOX1,
              name='comboBox1', parent=self.panel1, pos=wx.Point(96, 64),
              size=wx.Size(130, 21), style=0, value='')
        self.comboBox1.SetLabel('')
        self.comboBox1.Bind(wx.EVT_COMBOBOX, self.OnSucuVendedoraCombobox,
              id=wxID_DIALOG1COMBOBOX1)

        self.comboBox2 = wx.ComboBox(choices=[], id=wxID_DIALOG1COMBOBOX2,
              name='comboBox2', parent=self.panel1, pos=wx.Point(232, 64),
              size=wx.Size(96, 21), style=0, value='')
        self.comboBox2.SetLabel('')

        self.comboBox4 = wx.ComboBox(choices=[], id=wxID_DIALOG1COMBOBOX4,
              name='comboBox4', parent=self.panel1, pos=wx.Point(16, 104),
              size=wx.Size(130, 21), style=0, value='')
        self.comboBox4.SetLabel('')

        self.staticText3 = wx.StaticText(id=wxID_DIALOG1STATICTEXT3,
              label='Sucursal', name='staticText3', parent=self.panel1,
              pos=wx.Point(96, 48), size=wx.Size(40, 13), style=0)

        self.staticText4 = wx.StaticText(id=wxID_DIALOG1STATICTEXT4,
              label='Usuario', name='staticText4', parent=self.panel1,
              pos=wx.Point(232, 48), size=wx.Size(36, 13), style=0)

        self.staticText5 = wx.StaticText(id=wxID_DIALOG1STATICTEXT5,
              label='Observacion', name='staticText5', parent=self.panel1,
              pos=wx.Point(16, 128), size=wx.Size(60, 13), style=0)

        self.textCtrl3 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL3, name='textCtrl3',
              parent=self.panel1, pos=wx.Point(16, 144), size=wx.Size(312, 21),
              style=0, value='')
        self.textCtrl3.Bind(wx.EVT_KILL_FOCUS, self.OnPerderFocus)

        self.comboBox3 = wx.ComboBox(choices=[], id=wxID_DIALOG1COMBOBOX3,
              name='comboBox3', parent=self.panel1, pos=wx.Point(16, 184),
              size=wx.Size(72, 21), style=0, value='')
        self.comboBox3.SetLabel('')
        self.comboBox3.Bind(wx.EVT_COMBOBOX, self.OnFormaPago,
              id=wxID_DIALOG1COMBOBOX3)
        self.comboBox3.Bind(wx.EVT_KILL_FOCUS, self.OnKillFocus)

        self.staticText6 = wx.StaticText(id=wxID_DIALOG1STATICTEXT6,
              label='Forma de pago', name='staticText6', parent=self.panel1,
              pos=wx.Point(16, 168), size=wx.Size(88, 13), style=0)

        self.textCtrl4 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL4, name='textCtrl4',
              parent=self.panel1, pos=wx.Point(88, 184), size=wx.Size(120, 21),
              style=0, value='')
        self.textCtrl4.SetEditable(False)

        self.staticText7 = wx.StaticText(id=wxID_DIALOG1STATICTEXT7,
              label='Monto', name='staticText7', parent=self.panel1,
              pos=wx.Point(16, 208), size=wx.Size(30, 13), style=0)

        self.textCtrl6 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL6, name='textCtrl6',
              parent=self.panel1, pos=wx.Point(216, 184), size=wx.Size(40, 21),
              style=0, value='')
        self.textCtrl6.Enable(True)
        self.textCtrl6.Show(False)

        self.textCtrl7 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL7, name='textCtrl7',
              parent=self.panel1, pos=wx.Point(256, 184), size=wx.Size(40, 21),
              style=0, value='')
        self.textCtrl7.Show(False)

        self.textCtrl5 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL5, name='textCtrl5',
              parent=self.panel1, pos=wx.Point(16, 224), size=wx.Size(64, 21),
              style=0, value='')
        self.textCtrl5.SetToolTipString('textCtrl5')

        self.button1 = wx.Button(id=wxID_DIALOG1BUTTON1, label='Aceptar',
              name='button1', parent=self.panel1, pos=wx.Point(16, 264),
              size=wx.Size(75, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnAceptar, id=wxID_DIALOG1BUTTON1)

        self.button2 = wx.Button(id=wxID_DIALOG1BUTTON2, label='Limpiar',
              name='button2', parent=self.panel1, pos=wx.Point(96, 264),
              size=wx.Size(75, 23), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnLimpiar, id=wxID_DIALOG1BUTTON2)

        self.button3 = wx.Button(id=wxID_DIALOG1BUTTON3, label='Salir',
              name='button3', parent=self.panel1, pos=wx.Point(256, 264),
              size=wx.Size(75, 23), style=0)
        self.button3.Bind(wx.EVT_BUTTON, self.OnSalir, id=wxID_DIALOG1BUTTON3)

        self.staticText8 = wx.StaticText(id=wxID_DIALOG1STATICTEXT8,
              label='Motivo', name='staticText8', parent=self.panel1,
              pos=wx.Point(16, 88), size=wx.Size(32, 13), style=0)

        self.staticText9 = wx.StaticText(id=wxID_DIALOG1STATICTEXT9,
              label='Lote', name='staticText9', parent=self.panel1,
              pos=wx.Point(216, 168), size=wx.Size(21, 13), style=0)
        self.staticText9.Enable(True)
        self.staticText9.Show(False)

        self.staticText10 = wx.StaticText(id=wxID_DIALOG1STATICTEXT10,
              label='Cupon', name='staticText10', parent=self.panel1,
              pos=wx.Point(256, 168), size=wx.Size(31, 13), style=0)
        self.staticText10.Enable(True)
        self.staticText10.Show(False)

    def __init__(self, parent, tipo=""):
        self._init_ctrls(parent)
        self.tipo = 0
        if tipo == "egreso":
            self.textCtrl2.SetLabel("EGRESO")
            self.textCtrl2.SetBackgroundColour(ROJO)
            self.SetTitle("EGRESO")
        else:
            self.textCtrl2.SetLabel("INGRESO")
            self.textCtrl2.SetBackgroundColour(VERDE)
            self.SetTitle("INGRESO")
        self.fecha1 = utiles.obtenerFecha("d-m-Y")
        self.textCtrl1.SetLabel(self.fecha1)
        self.comboSucursales()
        self.comboMotivos()
        self.cargarComboVendedora()
        self.cargarComboFormaPagos()
        self.comboBox2.SetFocus()

    def comboMotivos(self):
        sql = "SELECT motivo FROM cajamotivo ORDER BY motivo"
        resultado=consultasBD.ordenCruda(sql)
        for item in resultado:
            self.comboBox4.Append(item[0])

    def comboSucursales(self):
        sucursal = utiles.getSucursalActiva()
        SQL = "SELECT nombre FROM sucursales WHERE codsucursal='%s'" % (sucursal)
        resultado = consultasBD.ordenCrudaDict(SQL)
        self.comboBox1.SetLabel(resultado[0]["nombre"])
        SQL = "SELECT nombre FROM sucursales"
        resultado = consultasBD.ordenCrudaDict(SQL)
        for item in resultado:
            self.comboBox1.Append(item["nombre"])
        misucursal = int(sucursal)-1
        self.comboBox1.SetLabel(self.comboBox1.GetItems()[misucursal])
        self.comboBox1.SetValue(self.comboBox1.GetItems()[misucursal])
        self.comboBox1.SetSelection(misucursal)
        self.comboBox1.SetEditable(False)

    def OnSucuVendedoraCombobox(self, event):
        nombre = self.comboBox1.GetValue()
        SQL = "SELECT codsucursal FROM sucursales WHERE nombre='%s'" % (nombre)
        resultado = consultasBD.ordenCrudaDict(SQL)
        self.comboBox2.SetValue("")
        self.cargarComboVendedora()

    def cargarComboVendedora(self):
        nombre = self.comboBox1.GetLabel()
        SQL = "SELECT codsucursal FROM sucursales WHERE nombre='"+nombre+"'"
        resultado = consultasBD.ordenCrudaDict(SQL)
        sucursal = resultado[0]["codsucursal"]
        self.comboBox2.Clear()
        SQL = "SELECT * FROM vendedoras WHERE sucursal='%s'" % (sucursal)
        resultado = consultasBD.ordenCrudaDict(SQL)
        for item in resultado:
            self.comboBox2.Append(item["nombre"])
        self.comboBox2.SetEditable(False)
        self.comboBox2.SetFocus()

    def cargarComboFormaPagos(self):
        SQL = "SELECT nombre,descripcion FROM valores WHERE tipo='0' ORDER BY valor ASC,nombre DESC"
        resultado = consultasBD.ordenCrudaDict(SQL)
        self.comboBox3.Clear()
        resultado = consultasBD.ordenCrudaDict(SQL)
        self.formasDePagos = {}
        for item in resultado:
            self.comboBox3.Append(item["nombre"])
            self.formasDePagos[item["nombre"].upper()]=item["descripcion"]

    def OnFormaPago(self, event):
        try:
            self.comboBox3.SetLabel(self.comboBox3.GetLabel().upper())
            self.textCtrl4.SetLabel(self.formasDePagos[self.comboBox3.GetLabel().upper()])
        except:
            self.textCtrl4.SetLabel("")
            self.comboBox3.SetLabel("")
            
        sql = "SELECT tipoVenta FROM valores WHERE nombre='"+self.comboBox3.GetLabel()+"' "
        dato = consultasBD.ordenCruda(sql)
        try:
            dato = int(dato[0][0])
        except:
            dato = 0

        self.tipo = dato
        if self.tipo == 1:
            self.staticText9.Show(True)
            self.staticText10.Show(True)
            self.textCtrl6.Show(True)
            self.textCtrl7.Show(True)
        else:
            self.staticText9.Show(False)
            self.staticText10.Show(False)
            self.textCtrl6.Show(False)
            self.textCtrl7.Show(False)
        
    def OnKillFocus(self, event):
        self.OnFormaPago(None)

    def OnSalir(self, event):
        self.Close()
        
    def verificar(self):
        if self.comboBox2.GetLabel()=="":
            utiles.mensaje(None,"Quien es usted?\nIdentifiquese por favor")
            self.comboBox2.SetFocus()
            return False
        if self.comboBox4.GetLabel()=="":
            utiles.mensaje(None,"Debe ingresar un MOTIVO")
            self.comboBox4.SetFocus()
            return False
        if self.textCtrl3.GetLabel()=="":
            utiles.mensaje(None,"Debe ingresar una descripcion de la operacion")
            self.textCtrl3.SetFocus()
            return False
        if self.comboBox3.GetLabel()=="":
            utiles.mensaje(None,"Debe indicar tipo de valor")
            self.comboBox3.SetFocus()
            return False
        if self.tipo == 1:
            valor1 = self.textCtrl6.GetLabel()
            valor2 = self.textCtrl7.GetLabel()
            try:
                valor1 = int(valor1)
            except:
                utiles.mensaje(None,"Debe especificar un nro. LOTE")
                self.textCtrl6.SetFocus()
                return False
            try:
                valor2 = int(valor2)
            except:
                utiles.mensaje(None,"Debe especificar un nro. CUPON")
                self.textCtrl7.SetFocus()
                return False
        try:
            monto = Decimal(self.textCtrl5.GetLabel()).quantize(Decimal("0.10"))
        except:
            utiles.mensaje(None,"Debe indicar un monto")
            self.textCtrl5.SetLabel("")
            self.textCtrl5.SetFocus()
            return False
        return True

    def OnLimpiar(self, event):
        self.comboBox1.SetLabel("")
        self.comboBox1.SetSelection(-1)
        self.comboBox2.SetLabel("")
        self.comboBox2.SetSelection(-1)
        self.comboBox3.SetLabel("")
        self.comboBox3.SetSelection(-1)
        self.comboBox4.SetLabel("")
        self.comboBox4.SetSelection(-1)
        self.textCtrl3.SetLabel("")
        self.textCtrl4.SetLabel("")
        self.textCtrl5.SetLabel("")
        self.comboSucursales()
        self.cargarComboVendedora()
        self.cargarComboFormaPagos()
        self.comboBox2.SetFocus()

    def OnAceptar(self, event):
        if not self.verificar():
            return
        fecha = utiles.obtenerFecha("Y-m-d h:m:s")
        tipoalta = self.textCtrl2.GetLabel()
        observaciones = self.textCtrl3.GetLabel()
        usuario = self.comboBox2.GetLabel()
        idvalor = self.comboBox3.GetLabel()
        monto = self.textCtrl5.GetLabel()
        motivo = self.comboBox4.GetLabel()
        lote = self.textCtrl6.GetLabel()
        cupon = self.textCtrl7.GetLabel()
        if lote !="" and cupon != "":
            descripcionpago = "Tarjeta "+self.comboBox3.GetLabel()+" / "+lote+" / "+cupon
        else:
            descripcionpago = self.comboBox3.GetLabel()
        
        tablaSQL = "cajachica2(fecha,tipoalta,motivo,observaciones,usuario,idvalor,monto,descripcionpago)"
        r1 = "('"+fecha+"','"+tipoalta+"','"+motivo+"','"+observaciones+"','"+usuario
        r2 = "','"+idvalor+"','"+monto+"','"+descripcionpago+"')"
        camposSQL = r1+r2
        try:
            id = consultasBD.executaInsertSQL(None,tablaSQL,camposSQL)
            print "Actualizado",tipoalta,id
        except:
            utiles.mensaje(None,"Error al grabar el registro.\nReintente mas tarde")
        self.Close()

    def OnPerderFocus(self, event):
        self.textCtrl3.SetLabel((self.textCtrl3.GetLabel()).upper())
